﻿///////////////////////////////////////////////////////////////////////////////
/// Copyright (c) by longshuang@msn.cn 2014.
/// All rights reserved.
///
/// @File	: Engine.String.hpp
/// @Brief	: 字串操作工具集
/// @Author	: Leo Zhao <longshuang@msn.cn>
/// @Date	: 2014-12-05
///
/// CHANGELOG
/// 	2014-12-05	增加Trim，Format及Split接口
///////////////////////////////////////////////////////////////////////////////
#ifndef		__ENGINE_STRING_HPP_INCLUDE__
#define		__ENGINE_STRING_HPP_INCLUDE__

#include	<cstdarg>
#include	<string>
#include	<vector>

namespace Engine { namespace String {

	/// @Brief	: 字符串Copy，统一平台
	/// @Param	: szDst			目标字串
	/// @Param	: szSrc			来源字串
	/// @Param	: nSizeOfDst	最大Copy字节
	/// @Return	: NONE
	void			Copy(char * szDst, const char * szSrc, size_t nSizeOfDst);

	/// @Brief	: 去掉字串首尾空白字符，STL-String版
	/// @Param	: szTarget	需要处理的字串
	/// @Return	: 返回最终的处理结果STL-String
	std::string		Trim(const std::string & szTarget);

	/// @Brief	: 格式化字串。注：使用该接口时注意最终字串不可大于8k
	/// @Param	: szFmt		字串的生成规则
	/// @Param	: ...		格式化字串需要的参数
	/// @Return	: 返回最终的字串
	std::string		Format(const char * pStrFmt, ...); 

	/// @Brief	: 格式化字串。注：使用该接口时注意最终字串不可大于8k
	/// @Param	: szFmt		字串的生成规则
	/// @Param	: ...		格式化字串需要的参数
	/// @Return	: 返回最终的字串
	std::string		FormatV(const char * pStrFmt, va_list args);

	/// @Brief	: 将字串中a-z转换为A-Z
	/// @Param	: szTarget	需要处理的字串
	/// @Return	: 返回最终的处理结果STL-STRING
	std::string		ToUpper(const std::string & szTarget);

	/// @Brief	: 将字串中A-Z转换为a-z
	/// @Param	: szTarget	需要处理的字串
	/// @Return	: 返回最终的处理结果STL-STRING
	std::string		ToLower(const std::string & szTarget);

	/// @Brief	: 以指定分隔符集分隔字串
	/// @Param	: szTarget	需要分隔的字串
	/// @Param	: szSpec	分隔字符集
	/// @Return	: 返回分隔后的子串集合
	std::vector<std::string>	Split(const std::string & szTarget, const std::string & szSpec);
}};

#endif//!	__ENGINE_STRING_HPP_INCLUDE__

